#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
    int x=0,f=0,ch=getchar();
    while(!isdigit(ch)) f|=ch=='-',ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return f?-x:x;
}
int T;
const int N=2e5+5;
int n;
int a[N];
bool f[N];
int ans;
int fd() {
    int res=0;
    int p0=0,p1=0;
    for(int i=1;i<=n;i++) {
        if(f[i]) {
            if(p0==a[i]) {
                res+=a[i];
            }
            p0=a[i];
        }
        else {
            if(p1==a[i]) {
                res+=a[i];
            }
            p1=a[i];
        }
    }
    return res;
}
void dfs(int x) {
    if(x==n+1) {
        ans=max(ans,fd());
        return ;
    }
    f[x]=0;
    dfs(x+1);
    f[x]=1;
    dfs(x+1);
}
const int M=105;
int dp[M][M][M];
signed main() {
    freopen("color.in","r",stdin);
    freopen("color.out","w",stdout);
    T=read();
    while(T--) {
        n=read();
        for(int i=1;i<=n;i++) a[i]=read();
        if(n<=15) {
            ans=0;
            dfs(1);
            cout<<ans<<'\n';
        }
        else if(n<=100) {
            memset(dp,0,sizeof(dp));
            for(int i=1;i<=n;i++) {
                for(int j=1;j<i;j++) {
                    for(int k=1;k<i;k++) {
                        if(a[i]!=a[k])
                            dp[i+1][j][i]=max(dp[i][j][k],dp[i+1][j][i]);
                        else dp[i+1][j][i]=max(dp[i][j][k]+a[i],dp[i+1][j][i]);
                        if(a[i]!=a[j])
                            dp[i+1][i][k]=max(dp[i][j][k],dp[i+1][i][k]);
                        else dp[i+1][i][k]=max(dp[i][j][k]+a[i],dp[i+1][i][k]);
                    }
                }
            }
            int res=0;
            for(int i=1;i<n;i++) {
                for(int j=1;j<n;j++)
                    res=max(res,dp[n][i][j]);
            }
            cout<<res<<'\n';
        }
    }
    return 0;
}
